package offer.day30;

public class No50GetFirstNotRepeatingChar_InString {
    /*
     * 面试题50：第一次只出现一次的字符
     * 题目一：字符串中第一次只出现一次的字符
     * 在字符串中找出第一个只出现一次的字符。
     * 如输入"abaccdeff",则输出'b'
     *
     * 思路：统计每个字符串显得次数：需要使用一个容器存储 ---哈希表  键：ASCII码 值：字符串中出现的次数
     * 需要进行两次扫描：
     * 第一次扫描：跟新哈希表中灭一个字符出现的次数
     * 第二次扫描：没扫描一个字符，就从哈希表中读取其出现的次数，遇到的第一个仅出现一次的字符，则将其返回即可
     * 因为字符是一个长度为8的数据类型，因此总共有256种可能。所以只需要创建一个256，以字符ASCII码为键的哈希表即可
     *
     *
     * */
    public static void main(String[] args) {
        No50GetFirstNotRepeatingChar_InString g = new No50GetFirstNotRepeatingChar_InString();
        String s = "abaccdeff";
        System.out.println("字符串中第一个只出现一次的字符："+g.GetFirstNotRepeatingChar_InString(s));
    }

    private String GetFirstNotRepeatingChar_InString(String s) {
        if(s==null||s.length()==0) return null;
        int[] ch=new int[256];
        for(int i=0;i<s.length();i++){
            ch[s.charAt(i)]++;
        }
        for(int i=0;i<s.length();i++){
            if(ch[s.charAt(i)]==1){
                return s.substring(i,i+1);
            }
        }
        return null;
    }
}
